{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## sklearn 中的逻辑回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "np.random.seed(666)\n",
    "X = np.random.normal(0, 1, size=(200, 2))\n",
    "y = np.array(X[:,0]**2 + X[:,1] < 1.5, dtype='int')      #抛物线\n",
    "for _ in range(20):\n",
    "    y[np.random.randint(200)] = 1           #添加了20个点的噪音"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0xa9d8cbad88>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(X[y==0,0], X[y==0,1])\n",
    "plt.scatter(X[y==1,0], X[y==1,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### sklearn中的逻辑回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
       "                   intercept_scaling=1, l1_ratio=None, max_iter=100,\n",
       "                   multi_class='auto', n_jobs=None, penalty='l2',\n",
       "                   random_state=None, solver='lbfgs', tol=0.0001, verbose=0,\n",
       "                   warm_start=False)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "log_reg = LogisticRegression()\n",
    "log_reg.fit(X_train, y_train)          #penalty='l2'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.7933333333333333"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "log_reg.score(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.86"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "log_reg.score(X_test, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_decision_boundary(model, axis):\n",
    "    x0, x1 = np.meshgrid(\n",
    "        np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100)).reshape(-1, 1),\n",
    "        np.linspace(axis[2], axis[3], int((axis[3]-axis[2])*100)).reshape(-1, 1),\n",
    "    )\n",
    "    X_new = np.c_[x0.ravel(), x1.ravel()]\n",
    "\n",
    "    y_predict = model.predict(X_new)\n",
    "    zz = y_predict.reshape(x0.shape)\n",
    "\n",
    "    from matplotlib.colors import ListedColormap\n",
    "    custom_cmap = ListedColormap(['#EF9A9A','#FFF59D','#90CAF9'])\n",
    "    \n",
    "    plt.contourf(x0, x1, zz, cmap=custom_cmap)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0xa9dc1ec648>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_decision_boundary(log_reg, axis=[-4, 4, -4, 4])\n",
    "plt.scatter(X[y==0,0], X[y==0,1])\n",
    "plt.scatter(X[y==1,0], X[y==1,1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 多项式"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "def PolynomialLogisticRegression(degree):\n",
    "    return Pipeline([\n",
    "        ('poly', PolynomialFeatures(degree=degree)),\n",
    "        ('std_scaler', StandardScaler()),\n",
    "        ('log_reg', LogisticRegression())\n",
    "    ])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pipeline(memory=None,\n",
       "         steps=[('poly',\n",
       "                 PolynomialFeatures(degree=2, include_bias=True,\n",
       "                                    interaction_only=False, order='C')),\n",
       "                ('std_scaler',\n",
       "                 StandardScaler(copy=True, with_mean=True, with_std=True)),\n",
       "                ('log_reg',\n",
       "                 LogisticRegression(C=1.0, class_weight=None, dual=False,\n",
       "                                    fit_intercept=True, intercept_scaling=1,\n",
       "                                    l1_ratio=None, max_iter=100,\n",
       "                                    multi_class='auto', n_jobs=None,\n",
       "                                    penalty='l2', random_state=None,\n",
       "                                    solver='lbfgs', tol=0.0001, verbose=0,\n",
       "                                    warm_start=False))],\n",
       "         verbose=False)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly_log_reg = PolynomialLogisticRegression(degree=2)\n",
    "poly_log_reg.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9066666666666666"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly_log_reg.score(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.94"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly_log_reg.score(X_test, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0xa9dc4a3ac8>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_decision_boundary(poly_log_reg, axis=[-4, 4, -4, 4])\n",
    "plt.scatter(X[y==0,0], X[y==0,1])\n",
    "plt.scatter(X[y==1,0], X[y==1,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pipeline(memory=None,\n",
       "         steps=[('poly',\n",
       "                 PolynomialFeatures(degree=20, include_bias=True,\n",
       "                                    interaction_only=False, order='C')),\n",
       "                ('std_scaler',\n",
       "                 StandardScaler(copy=True, with_mean=True, with_std=True)),\n",
       "                ('log_reg',\n",
       "                 LogisticRegression(C=1.0, class_weight=None, dual=False,\n",
       "                                    fit_intercept=True, intercept_scaling=1,\n",
       "                                    l1_ratio=None, max_iter=100,\n",
       "                                    multi_class='auto', n_jobs=None,\n",
       "                                    penalty='l2', random_state=None,\n",
       "                                    solver='lbfgs', tol=0.0001, verbose=0,\n",
       "                                    warm_start=False))],\n",
       "         verbose=False)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly_log_reg2 = PolynomialLogisticRegression(degree=20)\n",
    "poly_log_reg2.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.94"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly_log_reg2.score(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.92"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly_log_reg2.score(X_test, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0xa9dae74588>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_decision_boundary(poly_log_reg2, axis=[-4, 4, -4, 4])\n",
    "plt.scatter(X[y==0,0], X[y==0,1])\n",
    "plt.scatter(X[y==1,0], X[y==1,1])                   #可能已经过拟合了"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "def PolynomialLogisticRegression(degree, C):\n",
    "    return Pipeline([\n",
    "        ('poly', PolynomialFeatures(degree=degree)),\n",
    "        ('std_scaler', StandardScaler()),\n",
    "        ('log_reg', LogisticRegression(C=C))\n",
    "    ])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pipeline(memory=None,\n",
       "         steps=[('poly',\n",
       "                 PolynomialFeatures(degree=20, include_bias=True,\n",
       "                                    interaction_only=False, order='C')),\n",
       "                ('std_scaler',\n",
       "                 StandardScaler(copy=True, with_mean=True, with_std=True)),\n",
       "                ('log_reg',\n",
       "                 LogisticRegression(C=0.1, class_weight=None, dual=False,\n",
       "                                    fit_intercept=True, intercept_scaling=1,\n",
       "                                    l1_ratio=None, max_iter=100,\n",
       "                                    multi_class='auto', n_jobs=None,\n",
       "                                    penalty='l2', random_state=None,\n",
       "                                    solver='lbfgs', tol=0.0001, verbose=0,\n",
       "                                    warm_start=False))],\n",
       "         verbose=False)"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly_log_reg3 = PolynomialLogisticRegression(degree=20, C=0.1)   #C 分类准确度损失函数的系数，让它小一些\n",
    "poly_log_reg3.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.84"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly_log_reg3.score(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.92"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly_log_reg3.score(X_test, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0xa9dadf3f08>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_decision_boundary(poly_log_reg3, axis=[-4, 4, -4, 4])\n",
    "plt.scatter(X[y==0,0], X[y==0,1])\n",
    "plt.scatter(X[y==1,0], X[y==1,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "def PolynomialLogisticRegression(degree, C, penalty='l2'):\n",
    "    return Pipeline([\n",
    "        ('poly', PolynomialFeatures(degree=degree)),\n",
    "        ('std_scaler', StandardScaler()),\n",
    "        ('log_reg', LogisticRegression(C=C, penalty=penalty))\n",
    "    ])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pipeline(memory=None,\n",
       "         steps=[('poly',\n",
       "                 PolynomialFeatures(degree=20, include_bias=True,\n",
       "                                    interaction_only=False, order='C')),\n",
       "                ('std_scaler',\n",
       "                 StandardScaler(copy=True, with_mean=True, with_std=True)),\n",
       "                ('log_reg',\n",
       "                 LogisticRegression(C=0.1, class_weight=None, dual=False,\n",
       "                                    fit_intercept=True, intercept_scaling=1,\n",
       "                                    l1_ratio=None, max_iter=100,\n",
       "                                    multi_class='auto', n_jobs=None,\n",
       "                                    penalty='l2', random_state=None,\n",
       "                                    solver='lbfgs', tol=0.0001, verbose=0,\n",
       "                                    warm_start=False))],\n",
       "         verbose=False)"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly_log_reg4 = PolynomialLogisticRegression(degree=20, C=0.1, penalty='l2')\n",
    "poly_log_reg4.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.84"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly_log_reg4.score(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.92"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly_log_reg4.score(X_test, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0xa9800c0488>"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_decision_boundary(poly_log_reg4, axis=[-4, 4, -4, 4])\n",
    "plt.scatter(X[y==0,0], X[y==0,1])\n",
    "plt.scatter(X[y==1,0], X[y==1,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
